package com.annotation.validator;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.ui.ModelMap;
import org.springframework.util.Assert;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

/**
 * 被实例是以field 放到Map里面，一定要注意 一个字段不能掉两次验证方法
 * 否则 Map key重复会报错 ，如果设计到调用两个验证方法 
 * 写一个通用方法进行判断，进入了第一次验证，不能让他进入第二次验证
 * @author hp
 *
 */
public abstract class WebValidateErrors {
	

	/**
	 * 将错误信息保存至ModelMap，并返回错误页面。
	 * 
	 * @param model
	 * @return 错误页面地址
	 * @see org.springframework.ui.ModelMap
	 */
	public static String showErrorPage(ModelMap model) {
		toModel(model);
		return errorPage;
	}
	/**
	 * 将错误信息保存至ModelMap
	 * 
	 * @param model
	 */
	public static void toModel(Map<String, Object> model) {
		Assert.notNull(model);
		Map m=(Map)getReq().getAttribute("mData");
		model.put(errorAttrName, m);
		getReq().removeAttribute("mData");
	}


	
	public void addErrorCode(String arg1,String arg2){
		Map <String, String> mData=(Map)getReq().getAttribute("mData");
		if(mData==null){
			mData=new HashMap<String, String>();
		}
		String value=mData.get(arg1);
		if(value==null)
		mData.put(arg1, arg2);
		getReq().setAttribute("mData", mData);
	}
	/**
	 * 是否存在错误
	 * 
	 * @return
	 */
	public static boolean hasErrors() {
		Map m=(Map)getReq().getAttribute("mData");
		if(m==null)
			return false;
		return m.size()>0;
	}
	
	private static HttpServletRequest getReq(){
		ServletRequestAttributes requestAttributes=(ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
		return  requestAttributes.getRequest();
	}



	/**
	 * 获得错误页面的地址
	 * 
	 * @return
	 */
	public static String errorPage="common/message";
	
	/**
	 * 获得错误参数名称
	 * 
	 * @return
	 */
	protected static String errorAttrName="validator_errors";
}
